K-means聚类算法原理分析与实际应用案例分析(案例分析另起一篇博客)

引言

在数据分析中,我们常常想将看上去相似或者行为形似的数据聚合在一起。例如,对一个营销组织来说,将不同客户根据他们的特点进行分组,从而有针对性地定制营销活动,这很重要。又比如,对学校老师来说,将学生分组同样能够有所侧重的进行教育活动。分类与聚类是数据挖掘领域两大基础方法,分类被用于监督学习中而聚类算法属于无监督的。聚类算法主要是将相似的数据聚合在一起形成不同的组别,但是组与组之间相差很大。
在本次分享中,我将给大家介绍一种无监督算法K-means算法,为什么介绍这种算法呢?因为这种算法概念简单,实现容易,而且好用!

K-means聚类算法的介绍

相似性度量

K-means算法是一种无监督学习算法,可以被应用到无标签的数据中。这个算法的目的就是要找到数据的分组,分组的数目由K指定。这个算法基于提供的特征,迭代地将数据分配个K个组别的其中一个。数据是基于数据相似性被聚类的。K-means聚类算法的结果就是:

  • K个聚类中心,可以用来标注新的数据
  • 数据标签,每个数据都被分配给一个簇

基本K-means算法的相似性度量是基于距离计算的,最典型的就是欧几里得距离。欧几里得距离计算给定两点之间的距离,公式如下:
d i s t e d ( x i , x j ) = ∣ ∣ x i − x j ∣ ∣ 2 = ∑ u = 1 n ∣ x i u − x j u ∣ 2 dist_ed(x_i,x_j) = ||x_i-x_j||_2=\sqrt{\sum_{u=1}^n|x_{iu}-x_{ju}|^2} disted(xi,xj)=xixj2=u=1nxiuxju2

算法流程

K-means算法的流程很简单,具体如下:

  • 首先,随机确定k个初始点作为质心。
  • 然后将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。
  • 将每个簇的质心更新为该簇所有点的平均值
  • 如果质心不再变化或者说变化很小,退出循环,否则返回到第二步

K-means的伪代码如下:
k-means

K-means的实现

因为在前面一次博文分享中,有讲到K-means算法的实际应用场景,大家可以直接调转到那里去: 基于改进的K-means算法在共享交通行业客户细分中的应用那篇博文使用的K-means算法是sklearn中的K-means++算法。
##K-means不足
###初始点的选取
K-means算法在实际使用中存在一些不足。在实际使用中,我们发现K-means对初始点的选取很敏感,这种敏感就会导致K-means算法很可能收敛到局部最优。于是有人提出了两种方法,一种是K-means++,一种是二分K-means算法来尽量使K-means达到全局最优。

K-means++

k-means++算法选择初始聚类中心的基本原则是:初始的聚类中心之间的相互距离要尽可能的远。它选择初始聚类中心的步骤是:

(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心;
(2)对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x),并根据以下概率选择新的聚类中心。
(3)重复过程(2)直到找到k个聚类中心。

二分K-means

二分K-means使用一种度量聚类效果的指标是SSE(Sum of Squared Error,误差平方和)。SSE越小表示数据点越接近它们的质心,聚类效果也是最好。二分K-means算法的工作流程是:

  • (1)首先将所有点作为一个簇,然后将簇一分为二
  • (2)之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否可以最大程度地降低SSE的值
  • (3)上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。

k的确定

这个k值选择的问题,讲真目前还真没有什么太好的方法解决,一般都是实际业务场景,靠工程经验去判定k的取值。

距离计算

上面K-means的实现我们是基于欧几里得距离的,但是实际业务场景中有很多的距离计算方式,有个叫"distance metric learning"的实现方法可以用来做这件事情。本博文就不做介绍了。

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
k-means聚类算法是一种常用的无监督学习算法,可以对数据进行聚类分析。它的性能分析主要从以下几个方面考虑: 1. 时间复杂度:k-means算法的时间复杂度主要取决于数据集的大小、簇的个数和迭代次数。一般情况下,算法的时间复杂度为O(n*k*i),其中n是数据集的大小,k是簇的个数,i是迭代次数。由于算法需要多次迭代来更新簇的中心点,因此时间复杂度比较高,尤其是在大规模数据集上,计算量非常大。 2. 空间复杂度:k-means算法的空间复杂度主要取决于数据集的大小和簇的个数。算法需要维护每个簇的中心点和每个点所属的簇,因此空间复杂度也比较高。 3. 算法的收敛性:k-means算法是一种迭代算法,每次迭代都会更新簇的中心点,直到簇的中心点不再发生变化或者达到预设的迭代次数。因此,算法的收敛性取决于初始簇的中心点的选择和迭代次数的设置。如果选择的初始簇中心点较差或者设置的迭代次数较小,可能会导致算法无法收敛或者收敛到局部最优解。 4. 簇的个数的选择:k-means算法中,簇的个数是需要预先指定的。如果选择的簇的个数不合适,可能会导致聚类结果不理想,或者无法得到有意义的聚类结果。 综上所述,k-means算法在一定程度上受到时间复杂度和空间复杂度的限制,需要根据实际情况选择合适的参数和算法优化方法,以达到更好的性能和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小虎AI实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值